﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using PomodoroSuite.EntidadesNegocio;
using PomodoroSuite.FrontEnd.Win.Properties;
using PomodoroSuite.FW.DAL;
using ComponentFactory.Krypton.Toolkit;

namespace PomodoroSuite.FrontEnd.Win
{
    public partial class frmUsuarios : KryptonForm
    {
        #region " Campos "

        private DalGenerico<Usuario> dalUsuario = null;

        #endregion

        #region " Constructor "

        public frmUsuarios()
        {
            InitializeComponent();
            dalUsuario = FabricaDAL.ObtenerDal<Usuario>();
        }

        #endregion

        #region " Eventos Formulario "

        private void frmUsuarios_Load(object sender, EventArgs e)
        {
            gridUsuarios.DataSource = dalUsuario.ObtenerListado();
        }

        private void gridUsuarios_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (gridUsuarios.SelectedRows.Count > 0)
            {
                Usuario usr = gridUsuarios.SelectedRows[0].DataBoundItem as Usuario;
                txtNombre.Text = usr.Nombre;
                txtLogin.Text = usr.Login;
                txtPwd.Text = usr.Password;
                txtPwd2.Text = usr.Password;
                txtPwd.Enabled = false;
                txtPwd2.Enabled = false;
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtLogin.Text = "";
            txtPwd.Text = "";
            txtPwd2.Text = "";
            txtPwd.Enabled = true;
            txtPwd2.Enabled = true;
            gridUsuarios.ClearSelection();
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            Usuario usr = null;
            /// Si el textbox del password está habilitado es un nuevo usuario
            if (txtPwd.Enabled)
            {
                /// Si ya existe un usuario con el mismo login
                if ((gridUsuarios.DataSource as IList<Usuario>).FirstOrDefault(x => x.Login == txtLogin.Text) != null)
                {
                    MessageBox.Show(Resources.frmUsuarios_LoginExistente, Resources.comun_Informacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtLogin.Focus();
                    txtLogin.SelectAll();
                    return;
                }
                if (txtPwd.Text == txtPwd2.Text)
                {
                    usr = new Usuario()
                        {
                            IdUsuario = 0,
                            Nombre = txtNombre.Text,
                            Login = txtLogin.Text,
                            Password = txtPwd.Text
                        };

                    dalUsuario.Insertar(usr);
                    gridUsuarios.DataSource = dalUsuario.ObtenerListado();
                }
                else
                {
                    MessageBox.Show(Resources.frmUsuarios_PasswordNoCoincide, Resources.comun_Informacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
            else
            {
                usr = gridUsuarios.SelectedRows[0].DataBoundItem as Usuario;
                usr.Nombre = txtNombre.Text;
                /// Si se está modificando el login de un usuario existente
                if (txtLogin.Text != usr.Login)
                {
                    /// Si ya existe un usuario con el mismo login
                    if ((gridUsuarios.DataSource as IList<Usuario>).FirstOrDefault(x => x.Login == txtLogin.Text) != null)
                    {
                        MessageBox.Show(Resources.frmUsuarios_LoginExistente, Resources.comun_Informacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtLogin.Focus();
                        txtLogin.Text = usr.Login;
                        return;
                    }
                }

                usr.Login = txtLogin.Text;

                dalUsuario.Actualizar(usr);
                gridUsuarios.Refresh();
            }

            gridUsuarios.Focus();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        #endregion
    }
}